/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dvd.gestionnaires;

import dvd.modeles.Film;
import dvd.modeles.JouerRole;
import dvd.modeles.Personne;
import java.util.Collection;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
@LocalBean
public class gestionnairePersonne {

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @PersistenceContext
    private EntityManager em;
    @EJB
    private gestionnaireDvd gestionnaireDvd;

    public Personne creePersonne(String nom, String prenom, String description, String metier, String photo) {
        Personne p = new Personne(nom, prenom, description, metier, photo);
        em.persist(p);
        return p;
    }

    public void creerActeursDeTest() {
        creePersonne("Pitt", "Brad", "Est marié à Angelina Jolie", "acteur", "bradpitt.jpg");
        creePersonne("Jolie", "Angelina", "mariée à Brad Pitt", "acteur", "angelinajolie.jpg");
        creePersonne("Hannigan", "Alyson", "joue ds HIMYM", "acteur", "hannigan.jpg");
        creePersonne("Dicaprio", "Leonardo", "il est le roi du monde", "acteur", "dicaprio.jpeg");
        creePersonne("Cox Arquette", "Courtney", "Elle a joué le rôle de Monica Geller dans la série Friends", "acteur", "cox.jpg");
        creePersonne("Campbell", "Neve", "C'est une danseuse et une actrice canadienne", "acteur", "campbell.jpg");
        creePersonne("Radcliffe", "Daniel", "C'est un acteur britannique, connu pour avoir incarné Harry Potter.", "acteur", "radcliffe.jpg");
        creePersonne("Watson", "Emma", "Emma Watson, née Emma Charlotte Duerre Watson le 15 avril 1990 à Paris (France)1, est une actrice et mannequin britannique, célèbre pour avoir joué le rôle d'Hermione Granger.", "acteur", "emmawatson.jpg");
        creePersonne("Grint", "Rupert", "Rupert Grint (Rupert Alexander Lloyd Grint), né le 24 août 1988 à Watton-at-Stone, Hertfordshire, Angleterre, est un acteur britannique.", "acteur", "rupertgrint.jpg");
        creePersonne("Depp", "Johnny", "Johnny Depp, né John Christopher Depp II1 le 9 juin 1963 à Owensboro dans le Kentucky, est un acteur, producteur et musicien américain.", "acteur", "johnnydepp.jpg");
        
    }

    public void creerRealisateursDeTest() {
        Personne p = creePersonne("Cameron", "James", "James Francis Cameron est un réalisateur, scénariste et producteur canadien, né le 16 août 1954 à Kapuskasing (Ontario, Canada)", "réalisateur", "jamescameron.jpg");
        Personne p2 = creePersonne("Liman", "Doug", "Doug Liman est un producteur, réalisateur et directeur de la photographie américain, né le 24 juillet 1965 à New York (États-Unis).", "réalisateur", "dougliman.jpg");
        Personne p3 = creePersonne("Burton", "Tim", "Timothy Walter Burton, dit Tim Burton, est un réalisateur, scénariste et producteur américain né le 25 août 1958 à Burbank en Californie.", "réalisateur", "timburton.jpg");

        Film f = gestionnaireDvd.getFilmFromTitre("Mr. & Mrs. Smith");
        f.setRealisateur(p2);
        Film f2 = gestionnaireDvd.getFilmFromTitre("Titanic");
        f2.setRealisateur(p);
        Film f3 = gestionnaireDvd.getFilmFromTitre("Dark Shadows");
        f3.setRealisateur(p3);
    }

    public Personne getPersonneByName(String nom, String prenom) {
        Query q = em.createQuery("select p from Personne p where lower(p.nom) Like lower(:nom) and lower(p.prenom) like lower (:prenom)");
        q.setParameter("nom", "%" + nom + "%");
        q.setParameter("prenom", "%" + prenom + "%");

        return (Personne) q.getSingleResult();
    }

    public Personne getPersonneById(int id) {
        return em.find(Personne.class, id);
    }

    public Collection<Personne> getAllActeurs() {
        Query q = em.createQuery("select p from Personne p where p.metier='acteur' order by p.prenom, p.nom");
        return q.getResultList();
    }

    public Collection<Personne> getAllRealisateurs() {
        Query q = em.createQuery("select p from Personne p where p.metier='réalisateur' order by p.prenom, p.nom");
        return q.getResultList();
    }

    public void addRole(Personne p, JouerRole r) {
        p.addRole(r);
        em.merge(p);
    }

    public void suppRole(Personne p, JouerRole r) {
        p.suppRole(r);
    }
}